#include "Continente.h"
#include "Territorio.h"

Continente::Continente(std::string nombre, int bonus) : nombre(nombre), bonus(bonus) {}

Continente::Continente(std::string nombre) : nombre(nombre), bonus(0) {}

void Continente::setBonus(int bonus) {
	this->bonus = bonus;
}

int Continente::getBonus() {
	return bonus;
}

void Continente::agregarTerritorio(Territorio* territorio) {
	territorios[territorio->getNombre()] = territorio;
}

bool Continente::enPoderDeJugador(string colorJugador) {
	for (map<string,Territorio*>::iterator it = territorios.begin(); it != territorios.end(); it++)
		if (! it->second->enPoderDeJugador(colorJugador) )
			return false;
	return true;
}

unsigned int Continente::getCantidadDeTerritoriosEnPoderDeJugador(string colorJugador) {
	unsigned int resultado = 0;
	for (map<string,Territorio*>::iterator it = territorios.begin(); it != territorios.end(); it++)
		if (it->second->enPoderDeJugador(colorJugador))
			resultado++;
	return resultado;
}

map<string,Territorio*>* Continente::getTerritorios() {
	return &territorios;
}

Territorio* Continente::getTerritorio(string nombreTerritorio) {
	Territorio* aux = NULL;
	if ( (territorios.count(nombreTerritorio)) != 0 )
		aux = territorios[nombreTerritorio];
	return aux;
}

bool Continente::todosLosTerritoriosConEjercitos() {
	for (map<string,Territorio*>::iterator it = territorios.begin(); it != territorios.end(); it++)
		if ( it->second->getCantidadDeEjercitos() == 0 )
			return false;
	return true;
}

string Continente::getNombre() {
	return nombre;
}

void Continente::quitarTerritorio(string territorio) {
	territorios.erase(territorio);
}
void Continente::quitarTerritorio(Territorio* territorio) {
	quitarTerritorio(territorio->getNombre());
}

Continente::~Continente()
{
	map<string,Territorio*>::iterator it = territorios.begin();
	
	while(territorios.size() != 0){
		Territorio *t = (*it).second;
		delete(t);
		territorios.erase(it);
		it = territorios.begin();
	}
}
